package com.example.robertluozizhao.framecollectdemo.activity;

import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.example.robertluozizhao.framecollectdemo.R;
import com.example.robertluozizhao.framecollectdemo.event.EventBusMessageEvent;
import com.example.robertluozizhao.framecollectdemo.event.observer.MyObserable;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import java.util.Observable;
import java.util.Observer;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

/**
 * Created by robert.luozizhao on 2018/1/24.
 */

public class EventActivity extends AppCompatActivity implements Observer{
    @BindView(R.id.start_post_activity)
    Button startPostActivity;
    @BindView(R.id.back_data)
    TextView backData;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
        ButterKnife.bind(this);
        EventBus.getDefault().register(this);
        MyObserable.getInstance().addObserver(this);
        Log.d("eventBus"," onCreate EventBus--> unregister");
    }


    @OnClick({R.id.start_post_activity})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.start_post_activity:
                startActivity(new Intent(this,EventPostActivity.class));
                break;
        }
    }


//    @Subscribe(threadMode = ThreadMode.POSTING) 默认，如果使用事件处理函数指定了线程模型为POSTING，那么该事件在哪个线程发布出来的，事件处理函数就会在这个线程中运行
                                                // ，也就是说发布事件和接收事件在同一个线程。

//    @Subscribe(threadMode = ThreadMode.BACKGROUND)  如果事件是在UI线程中发布出来的，那么该事件处理函数就会在新的线程中运行，
// 如果事件本来就是子线程中发布出来的，那么该事件处理函数直接在发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。

//@Subscribe(threadMode = ThreadMode.ASYNC) 无论事件在哪个线程发布，该事件处理函数都会在新建的子线程中执行
//    @Subscribe(threadMode = ThreadMode.MAIN_ORDERED)
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void OnMessageEvent(EventBusMessageEvent event){
        backData.setText(event.getMessage());
    }




    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("eventBus"," onDestroy EventBus--> unregister");
        EventBus.getDefault().unregister(this);
        MyObserable.getInstance().deleteObserver(this);
    }

    // 自定义观察者
    @Override
    public void update(Observable o, Object arg) {
        backData.setText(arg.toString());
    }
}
